import axios from 'axios';
import store from '@/store';
import { Message } from 'element-ui';
import router from '@/router';

const service = axios.create({
    baseURL: process.env.VUE_APP_BASE_API || '/api',
    timeout: 10000
})

// 请求拦截器
service.interceptors.request.use(
    config => {
        const token = store.getters['/user/token'];
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
)

// 3. 响应拦截器
service.interceptors.response.use(
    response => {
      const res = response.data
      // 假设后端约定：code === 200 表示成功
      if (res.code !== 200) {
        // 根据具体后端返回格式做调整
        Message.error({
          message: res.message || 'Error',
          duration: 3 * 1000,
        })
  
        // 401 或 403 时提示授权问题，强制登出或跳到登录页
        if (res.code === 401 || res.code === 403) {
          // 例如 token 过期、权限不足
          store.dispatch('user/resetToken').then(() => {
            router.push({ name: 'Login' })
          })
        }
        return Promise.reject(new Error(res.message || 'Error'))
      } else {
        // 走到这里说明 code === 200，返回具体数据
        return res
      }
    },
    error => {
      // HTTP 状态码非 2xx 时进入此处
      console.error('Response error:', error)
      Message.error({
        message: error.message,
        duration: 3 * 1000,
      })
  
      // 例如 401 HTTP：token 失效，跳登录
      if (error.response && (error.response.status === 401 || error.response.status === 403)) {
        store.dispatch('user/resetToken').then(() => {
          router.push({ name: 'Login' })
        })
      }
      return Promise.reject(error)
    }
  )
  
  export default service